﻿using System;
using System.Collections;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using BLL_NhaSach;
using DevExpress.XtraEditors;

namespace AppQlyNhaSach.NhanVien
{
    public partial class frmNhanVien : DevExpress.XtraEditors.XtraForm, IDataGrid
    {
        private NhanVienBLL nvBLL;

        public frmNhanVien()
        {
            InitializeComponent();
        }

        private void frmNhanVien_Load(object sender, EventArgs e)
        {
			nvBLL = new NhanVienBLL(Properties.Settings.Default.ConnectionStringUser);
            grdNhanVien.DataSource = nvBLL.getAllData();
			ChucVuBLL cvBLL = new ChucVuBLL(Properties.Settings.Default.ConnectionStringUser);
            cboMaCV.DataSource = cvBLL.getAllData();
            cboMaCV.DisplayMember = "TenChucVu";
            cboMaCV.ValueMember = "MaChucVu";
        }

        public System.Collections.ArrayList getRowsID()
        {
            ArrayList lst_id = new ArrayList();
            int[] ids = gridView1.GetSelectedRows();
            foreach (int i in ids)
            {
                int id = (Int32)gridView1.GetRowCellValue(i, "MaNV");
                lst_id.Add(id);
            }
            return lst_id;
        }

        private void gridView1_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
        {
            try
            {
                int id = int.Parse(gridView1.GetFocusedRowCellValue("MaNV").ToString());
                DAL_NhaSach.NhanVien nv = (DAL_NhaSach.NhanVien)nvBLL.findObjects(id);
                if (nv != null)
                {
                    txtMa.Text = nv.MaNV.ToString();
                    txtHoTen.Text = nv.HoTen;
                    txtDiaChi.Text = nv.DiaChi;
                    txtMK.Text = nv.MatKhau;
                    txtCMND.Text = nv.SoCMND;
                    txtEmail.Text = nv.Email;
                    txtSdt.Text = nv.SoDienThoai;
                    txtTenDN.Text = nv.TenDangNhap;
                    dtpNgaySinh.Value = nv.NgaySinh;
                    cboMaCV.SelectedValue = nv.MaChucVu;
                    if (nv.GioiTinh)
                        cboGioiTinh.SelectedIndex = 0;
                    else cboGioiTinh.SelectedIndex = 1;
                    chkTinhTrang.Checked = nv.TrangThai;
                }
            }
            catch { }
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            if (btnThem.Text.Equals("&Thêm"))
            {
                changeState(true);
                txtMa.Text = "";
                txtHoTen.Text = "";
                txtDiaChi.Text = "";
                txtMK.Text = "";
                txtCMND.Text = "";
                txtEmail.Text = "";
                txtSdt.Text = "";
                txtTenDN.Text = "";
                btnThem.Text = "Xác Nhận";
                btnHuy.Visible = true;
            }
            else if (btnThem.Text.Equals("Xác Nhận"))
            {
                if (checkValid())
                {
                    DialogResult r = XtraMessageBox.Show("Bạn có chắc chắn muốn thêm nhân viên này?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (r == DialogResult.Yes)
                    {
                        DAL_NhaSach.NhanVien nv = new DAL_NhaSach.NhanVien();
                        nv.TenDangNhap = txtTenDN.Text;
                        nv.HoTen = txtHoTen.Text;
                        nv.DiaChi = txtDiaChi.Text;
                        nv.Email = txtEmail.Text;
                        nv.MatKhau = txtMK.Text;
                        nv.SoDienThoai = txtSdt.Text;
                        nv.SoCMND = txtCMND.Text;
                        if (cboGioiTinh.SelectedIndex == 0)
                            nv.GioiTinh = true;
                        else nv.GioiTinh = false;
                        nv.MaChucVu = int.Parse(cboMaCV.SelectedValue.ToString());
                        nv.NgaySinh = dtpNgaySinh.Value;
                        nv.TrangThai = chkTinhTrang.Checked;
                        if (nvBLL.addObject(nv))
                        {
                            XtraMessageBox.Show("Thêm thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            changeState(false);
                            grdNhanVien.DataSource = nvBLL.getAllData();
                            btnHuy.Visible = false;
                            btnThem.Text = "&Thêm";
                        }
                        else
                            XtraMessageBox.Show("Thêm thất bại", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                    }
                }
            }
            else
            {
                if (checkValid())
                {
                    DialogResult r = XtraMessageBox.Show("Bạn có chắc chắn muốn cập nhật lại thông tin nhân viên này không?", "Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (r == DialogResult.Yes)
                    {
                        DAL_NhaSach.NhanVien nv = new DAL_NhaSach.NhanVien();
                        nv.MaNV = int.Parse(txtMa.Text);
                        nv.TenDangNhap = txtTenDN.Text;
                        nv.HoTen = txtHoTen.Text;
                        nv.DiaChi = txtDiaChi.Text;
                        nv.Email = txtEmail.Text;
                        nv.MatKhau = txtMK.Text;
                        nv.SoDienThoai = txtSdt.Text;
                        nv.SoCMND = txtCMND.Text;
                        if (cboGioiTinh.SelectedIndex == 0)
                            nv.GioiTinh = true;
                        else nv.GioiTinh = false;
                        nv.MaChucVu = int.Parse(cboMaCV.SelectedValue.ToString());
                        nv.NgaySinh = dtpNgaySinh.Value;
                        nv.TrangThai = chkTinhTrang.Checked;
                        if (nvBLL.updateObject(nv))
                        {
                            XtraMessageBox.Show("Cập nhật thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            changeState(false);
                            btnHuy.Visible = false;
                            btnThem.Text = "&Thêm";
                            grdNhanVien.DataSource = nvBLL.getAllData();
                        }
                        else XtraMessageBox.Show("Cập nhật thất bại", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
        }

        private void changeState(bool state)
        {
            if (state)
            {
                txtHoTen.Properties.ReadOnly = false;
                txtMK.Properties.ReadOnly = false;
                txtSdt.Properties.ReadOnly = false;
                txtTenDN.Properties.ReadOnly = false;
                txtEmail.Properties.ReadOnly = false;
                txtDiaChi.Properties.ReadOnly = false;
                txtCMND.Properties.ReadOnly = false;
                cboGioiTinh.Enabled = true;
                cboMaCV.Enabled = true;
                dtpNgaySinh.Enabled = true;
                grdNhanVien.Enabled = false;
                chkTinhTrang.Enabled = true;
            }
            else
            {
                txtMa.Text = "";
                chkTinhTrang.Enabled = false;
                txtHoTen.Properties.ReadOnly = true;
                txtMK.Properties.ReadOnly = !false;
                txtSdt.Properties.ReadOnly = !false;
                txtTenDN.Properties.ReadOnly = !false;
                txtEmail.Properties.ReadOnly = !false;
                txtDiaChi.Properties.ReadOnly = !false;
                txtCMND.Properties.ReadOnly = !false;
                cboGioiTinh.Enabled = !true;
                cboMaCV.Enabled = !true;
                dtpNgaySinh.Enabled = !true;
                grdNhanVien.Enabled = true;
            }
        }

        private bool checkValid()
        {
            String pCMND = @"^\d{9}$";
            String pEmail = @"^\w+@[a-z]+?\.[a-z]{2,3}$";
            String pSdt = @"^0\d{8,10}$";
            Regex rCMND = new Regex(pCMND);
            Regex rEmail = new Regex(pEmail);
            Regex rSdt = new Regex(pSdt);
            String nof = "";
            if (!rCMND.IsMatch(txtCMND.Text))
                nof += "Số CMND không hợp lệ !\n";
            if (!rEmail.IsMatch(txtEmail.Text))
                nof += "Địa chỉ email không hợp lệ !\n";
            if (!rSdt.IsMatch(txtSdt.Text))
                nof += "Số điện thoại không hợp lệ !";
            if (!nof.Equals(""))
            {
                XtraMessageBox.Show(nof, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
            else return true;
        }

        private void xóaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DialogResult r = XtraMessageBox.Show("Bạn có chắc chắn muốn xóa nhân viên này không?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (r == DialogResult.Yes)
            {
                try
                {
                    ArrayList lst = getRowsID();
                    if (lst.Count > 0)
                    {
                        foreach (int id in lst)
                        {
                            nvBLL.deleteObject(id);
                        }
                        XtraMessageBox.Show("Xóa thành công");
                        grdNhanVien.DataSource = nvBLL.getAllData();
                    }
                    else XtraMessageBox.Show("Phải chọn nhân viên cần xóa");
                }
                catch
                {
                    XtraMessageBox.Show("Lỗi trong khi xóa");
                }
            }
        }

        private void btnHuy_Click(object sender, EventArgs e)
        {
            changeState(false);
            btnHuy.Visible = false;
            btnThem.Text = "&Thêm";
            grdNhanVien.DataSource = nvBLL.getAllData();
        }

        private void sửaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            changeState(true);
            btnThem.Text = "Cập Nhật";
            btnHuy.Visible = true;
        }

        private void frmNhanVien_FormClosing(object sender, FormClosingEventArgs e)
        {
            frmMainNS.isNhanVien = false;
        }
    }
}